/**
 * 请求模块
 */
import axios from 'axios'
import store from '@/store'

// 这里创建的 service 就相当于配置了公共的请求根路径的 axios
// service 使用方式和 axios 一致
const service = axios.create({
  baseURL: 'http://192.168.15.65:666/', // 请求跟路径
  timeout: 5000 // 请求超时时间
})

// 请求拦截器
service.interceptors.request.use(config => {
  // 请求发起会经过这里
  // config: 本次请求的请求配置对象
  const { user } = store.state
  if (user && user.token) {
    if (config.url.indexOf('/users') !== -1) {
      config.url = `${config.url}?token=${user.token}`
    }
  }

  // 注意: 这里务必要返回 config 配置对象，否则请求就停在这里出不去了
  return config
}, error => {
  // 如果请求出错了（还没有发出去）会进入这里
  return Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(res => {
  // 响应成功会经过这里
  // 返回真实数据 axios 的真实数据存在 res.data 里面
  if (res.data.length === 0) return Promise.reject(JSON.stringify({ status: 200, msg: '请求数据为空' }))
  if (res.data.length === 1) return res.data[0]
  return res.data
}, error => {
  // 如果请求出错了（还没有发出去）会进入这里
  return Promise.reject(error)
})

export default service
